#ifndef __CONTROL_H__
#define __CONTROL_H__


#define maichong 1320.0 // 车轮一周的脉冲数为1320
#define wheel_D 0.08  // 车轮的直径为0.08m
#define C 0.251327432 //车轮的周长为0.251327432m
#define C_cm 25.1327432  //车轮的周长为25.1327432cm
#define tim6_Time 0.05 // 50ms秒采样一次来计算速度

// extern float RF_Kp;
// extern float RF_Ki;
// extern float RF_Kd;
// extern int16_t RF_PWMMax;
// extern int16_t RF_targetmaichong,RF_actualmaichong,RF_error,RF_Last_error,\
//              RF_Last_Last_error,RF_d_error,RF_dd_error,RF_PWM;

extern float RF_target_speed; // 各个轮子速度变量
extern float LF_target_speed;
extern float RB_target_speed;
extern float LB_target_speed;
/*
@brief:PID控制器结构体定义
@note：无
@param：P：Kp系数；I：Ki系数；D：Kd系数；OutputMax：输出最大值，用于限幅；Target：目标值；Actual：实际值；Error：当前误差；Last_Error：前一次误差；Last_Last_Error：上上次误差
@retval None
*/
typedef struct PID
{
    float P;              //Kp系数
    float I;              //Ki系数
    float D;              //Kd系数

    int16_t Target_maichong;        //目标值
    int16_t Actual_maichong;         //实际值
    int16_t Error0;         //当前误差
    int16_t Error1;        //前一次误差    
    int16_t Error2;         //上上次误差
    int16_t change_output; //变化输出值
    int16_t Output;        //PID输出值
}PID;

extern PID LF_PID;//声明左前电机PID控制结构体
extern PID LB_PID;//声明左后电机PID控制结构体

extern PID RF_PID;//声明右前电机PID控制结构体
extern PID RB_PID;//声明右后电机PID控制结构体
extern int16_t RF_PWM;


void Motor1_forward(int8_t mode);
void Motor2_forward(int8_t mode);
void Motor3_forward(int8_t mode);
void Motor4_forward(int8_t mode);
void left_motor_forward(int8_t mode);
void right_motor_forward(int8_t mode);
void Motor_Set_Speed(uint8_t motor_num,float *target_speed);//设置指定电机速度



#endif
